package it.azienda.managerworkstandard.view;

import it.azienda.framework.modello.BeanBase;
import it.azienda.framework.persistenza.DAOConnectionSingleton;
import it.azienda.managerworkstandard.modello.BeanLogin;
import it.azienda.framework.utilita.Utilita;
import it.azienda.framework.view.DettaglioStorico;
import it.azienda.managerworkstandard.modello.BeanCliente;
import it.azienda.managerworkstandard.modello.BeanClienteFed;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import javax.faces.component.UIViewRoot;
import javax.faces.component.html.HtmlForm;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import org.hibernate.Session;

public class DettaglioClienteFed extends DettaglioStorico {

    private HtmlForm form = new HtmlForm();
    private BeanClienteFed beanClienteFed;

    public void setBeanClienteFed(BeanClienteFed beanClienteFed) {
        setObj(beanClienteFed);
        this.beanClienteFed = beanClienteFed;
    }

    public BeanClienteFed getBeanClienteFed() {
        return (BeanClienteFed) getObj();
    }

    public HtmlForm getForm() {
        form = (HtmlForm) Utilita.getSession().getAttribute("formStorico");
        if (form == null) {
            form = new HtmlForm();
        }
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanClienteFed = (BeanClienteFed) ctx.getExternalContext().getRequestMap().get("beanClienteFed");
        controlloDopoSalvataggio(beanClienteFed);
        Utilita.getSession().removeAttribute("form");
        return form;
    }

    public void controlloDopoSalvataggio(Object obj) {
        BeanClienteFed clienteDett = (BeanClienteFed) obj;
    }

    public void setForm(HtmlForm form) {
        setFormObject(form);
        this.form = form;
        Utilita.getSession().setAttribute("formStorico", form);
    }

    public void primaInserimento() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanClienteFed = (BeanClienteFed) ctx.getExternalContext().getRequestMap().get("beanClienteFed");
        BeanLogin login = (BeanLogin) Utilita.getSession().getAttribute("login");
        HashMap listaOggetti = login.getListaOggetti();
        Integer posizione = (Integer) Utilita.getSession().getAttribute("posizioneOggetto");
        BeanCliente beanCliente = (BeanCliente) listaOggetti.get(posizione);
        this.beanClienteFed.setBeanCliente(beanCliente);

    }

    public void controlloCodiceFedelta(ValueChangeEvent event) {
        if (event.getNewValue() != null) {
            if (event.getNewValue().toString().length() >= 1) {
                String codiceFedelta = "";
                try {
                    codiceFedelta = (String) event.getNewValue();
                } catch (Exception ex) {
                    System.out.println("Errore: " + ex.toString());
                }
                if (codiceFedelta == null) {
                    codiceFedelta = "";
                }
                String url = "";
                try {
                    String query = "select cliente from BeanCliente cliente"
                            + " where cliente.codFedelta = :codFedelta";
                    Session sessione = DAOConnectionSingleton.newSession();
                    BeanCliente cliente = (BeanCliente) sessione.createQuery(query)
                            .setString("codFedelta", codiceFedelta)
                            .uniqueResult();
                    if (cliente == null) {
                        Utilita.getRequest().setAttribute("esito", "Nessun Cliente trovato con questo codice!");
                        url = "/esito.jsp";
                        Utilita.getRequest().removeAttribute("beanCliente");

                    } else {
                        BeanBase base = new BeanBase();
                        ArrayList listaOggetti = base.caricaTutti("Cliente");
                        Integer idBean = cliente.getId();
                        try {
                            for (int y = 0; y < listaOggetti.size(); y++) {
                                Integer pos = new Integer(y);
                                Method method = null;
                                Object obj = (Object) listaOggetti.get(pos.intValue());
                                Class classe = obj.getClass();
                                classe.newInstance();

                                Method[] metodi = classe.getMethods();
                                for (int i = metodi.length; i > 0; i--) {
                                    Method metodo = metodi[i - 1];
                                    String nomeMetodo = metodo.getName();
                                    if (nomeMetodo.startsWith("getId")) {
                                        method = classe.getMethod(nomeMetodo, new Class[]{});
                                        Integer id = (Integer) method.invoke(obj, new Object[]{});
                                        if (id != null) {
                                            if (id.intValue() == idBean.intValue()) {
                                                Utilita.getSession().removeAttribute("posizioneOggetto");
                                                Utilita.getSession().setAttribute("posizioneOggetto", pos);
                                                Utilita.getRequest().setAttribute("beanCliente", obj);

                                                BeanLogin login = (BeanLogin) Utilita.getSession().getAttribute("login");
                                                Utilita.getSession().removeAttribute("login");
                                                login.setListaOggetti(new HashMap());
                                                login.settaHashMapOggetti(listaOggetti);
                                                Utilita.getSession().setAttribute("login", login);

                                                y = listaOggetti.size();
                                            }
                                        }
                                    }
                                }
                            }
                        } catch (Exception ex) {
                        }
                        url = "/dettaglioCliente.jsf";

                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    url = "/errore.jsp";
                    Utilita.getRequest().setAttribute("errore", "Errore: " + e.toString());

                } finally {
                    FacesContext ctx = FacesContext.getCurrentInstance();
                    UIViewRoot view = ctx.getApplication().getViewHandler().createView(ctx, url);
                    view.setViewId(url);
                    ctx.setViewRoot(view);
                    ctx.renderResponse();
                }
            }
        }
    }
}
